// @tags: [
//   # Uses $where operator
//   requires_scripting,
// ]

let t = db.jstests_js8;
t.drop();

t.save({a: 1, b: [2, 3, 4]});

assert.eq(1, t.find().length(), "A");
assert.eq(1,
          t.find(function() {
               return this.a == 1;
           }).length(),
          "B");
assert.eq(1,
          t.find(function() {
               if (!this.b.length)
                   return true;
               return this.b.length == 3;
           }).length(),
          "B2");
assert.eq(1,
          t.find(function() {
               return this.b[0] == 2;
           }).length(),
          "C");
assert.eq(0,
          t.find(function() {
               return this.b[0] == 3;
           }).length(),
          "D");
assert.eq(1,
          t.find(function() {
               return this.b[1] == 3;
           }).length(),
          "E");

assert(t.validate().valid);
